package org.autumn.algorithm.leetcode;


import org.autumn.algorithm.BinaryPrint;

public class ArrayOddSearch {

    public static void main(String[] args) {
        int[] arr = {10, 10, 20, 20, 4, 4, 956, 8, 8, 680};

        /**
         * 在数组中只有一个数出现奇数, 剩下数组元素出现都是偶数
         * 找出奇数项
         */
//        int xor = 0;
//        for (int i = 0; i < arr.length; i++) {
//            xor ^= arr[i];
//        }
//        System.out.println(xor);


        /**
         * 在数组中只有二个数出现奇数, 剩下数组元素出现都是偶数
         * 找出两个奇数项
         */
        int xor = 0;
        for (int i = 0; i < arr.length; i++) {
            xor ^= arr[i];
        }
        // xor == a ^ b
        BinaryPrint.print(xor);
        int rignyOne = xor & (~xor + 1);
        System.out.println(rignyOne);

        int oneOfOdd = 0;
        for (int i = 0; i < arr.length; i++) {
            if ((arr[i] & rignyOne) == 0) {
                oneOfOdd ^= arr[i];
            }
        }
        System.out.println(oneOfOdd + " " + (xor ^ oneOfOdd));
    }
}
